%% 初始化设置
% 重置路径避免冲突
restoredefaultpath;

% 添加工具箱路径（使用安全方式）
eeglabPath = 'C:\Users\custs\workspace\matlab\congcong\lib\eeglab2023';
ftPath = 'C:\Users\custs\workspace\matlab\congcong\lib\fieldtrip-master';

% 先添加FieldTrip主目录
addpath(ftPath);
ft_defaults;  % FieldTrip初始化（自动设置路径）

% 再添加EEGLAB（放在路径末尾）
addpath(genpath(eeglabPath), '-end');
eeglab nogui;  % 初始化EEGLAB无GUI模式

%% 配置参数
dataDir = 'C:\Users\custs\workspace\matlab\congcong\data\aMCI';
outputDir = 'C:\Users\custs\workspace\matlab\congcong\data\aMCI\clean';
subjectIDs = {'103', '106', '204'};

% 确保输出目录存在
if ~exist(outputDir, 'dir')
    mkdir(outputDir);
end

%% 主处理循环
for subIndex = 1:length(subjectIDs)
    subjectID = subjectIDs{subIndex};
    fprintf('\n===== 处理被试: %s (%d/%d) =====\n', ...
        subjectID, subIndex, length(subjectIDs));
    
    try
        %% 加载原始数据
        inputFile = fullfile(dataDir, [subjectID '.set']);
        fprintf('正在加载: %s\n', inputFile);
        
        if ~exist(inputFile, 'file')
            error('文件不存在: %s', inputFile);
        end
        
        EEG = pop_loadset('filename', inputFile);
        
        %% 分离条件
        % 条件A (事件类型1111)
        fprintf('提取条件A (事件1111)...\n');
        EEG_A = pop_selectevent(EEG, 'type',[1111], 'deleteevents','on','deleteepochs','on','invertepochs','off');;
        
        % 条件B (事件类型2222)
        fprintf('提取条件B (事件2222)...\n');
        EEG_B = pop_selectevent(EEG, 'type',[2222], 'deleteevents','on','deleteepochs','on','invertepochs','off');;
        
        %% 转换为FieldTrip格式
        cfg = [];
        
        fprintf('转换为FieldTrip格式...\n');
        condA = eeglab2fieldtrip(EEG_A, 'preprocessing', cfg);
        condB = eeglab2fieldtrip(EEG_B, 'preprocessing', cfg);
        
        %% 数据预处理
        fprintf('执行预处理...\n');
        condA = ft_preprocessing(cfg, condA);
        condB = ft_preprocessing(cfg, condB);
        
        %% 保存结果
        outputFile = fullfile(outputDir, [subjectID '_amciCleanData.mat']);
        fprintf('保存结果: %s\n', outputFile);
        
        save(outputFile, 'condA', 'condB', '-v7.3'); % 使用高效格式
        fprintf('完成!\n');
        
    catch ME
        %% 错误处理
        fprintf(2, '处理被试 %s 时出错:\n', subjectID);
        fprintf(2, '错误信息: %s\n', ME.message);
        fprintf(2, '发生在: %s (行 %d)\n', ...
            ME.stack(1).name, ME.stack(1).line);
        
        % 记录错误但继续处理其他被试
        errors{subIndex} = struct(...
            'subject', subjectID, ...
            'message', ME.message, ...
            'stack', ME.stack);
    end
    
    %% 清理内存
    clear EEG EEG_A EEG_B condA condB
end

%% 错误报告
if exist('errors', 'var') && ~isempty(errors)
    fprintf('\n===== 错误摘要 =====\n');
    for i = 1:length(errors)
        if ~isempty(errors{i})
            fprintf('被试 %s: %s\n', ...
                errors{i}.subject, errors{i}.message);
        end
    end
end

fprintf('\n===== 处理完成 =====\n');